﻿namespace Unikado.PHPLibs.Tokenizer.Types
{

    /// <summary>
    /// The TypeRough is a part of a three-stage categorization of a PHP file token.
    /// Its the roughest outlined/detailed type. (no much details)
    /// <code>
    /// TypeRough (Very rough outline)
    ///  + TypeNormal (A medium outline)
    ///     + TypeFine (This is the finest outline)
    /// </code>
    /// </summary>
    public enum TypeRough
    {

        /// <summary>
        /// No PHP code.
        /// </summary>
        None,
        /// <summary>
        /// A opening or closing PHP Tag (All notations are supported)
        /// </summary>
        PhpTag,
        /// <summary>
        /// A Newline, space or tabulator
        /// </summary>
        Whitespace,
        /// <summary>
        /// A comment
        /// </summary>
        Comment,
        /// <summary>
        /// All PHP signature keywords: abstract, class, const, define, extends, final, implements, interface, namespace,
        /// private, protected, public, static, trait, use, var
        /// </summary>
        KeywordSignature,
        /// <summary>
        /// All other Keywords
        /// </summary>
        Keyword,
        /// <summary>
        /// A PHP operator
        /// </summary>
        Operator,
        /// <summary>
        /// A string definid of every known PHP string notation (in single or double quotes,
        /// as command with enclosing backticks or HEREDOC or NOWDOC)
        /// </summary>
        String,
        /// <summary>
        /// A Predefined PHP function name, class name, interface name, php constant name or variable
        /// </summary>
        Predefined,
        /// <summary>
        /// A open or closing bracket <b>{</b>, <b>[</b>, <b>(</b>, <b>}</b>, <b>]</b>, <b>)</b>
        /// </summary>
        Bracket,
        /// <summary>
        /// Includes and requires: <b>include</b>, <b>include_once</b>, <b>require</b>, <b>require_once</b>
        /// </summary>
        Include,
        /// <summary>
        /// A PHP number definition.
        /// </summary>
        Number,
        /// <summary>
        /// All other stuff like words, variables, etc.
        /// </summary>
        Other

    }

}